home *** CD-ROM | disk | FTP | other *** search
- {$X+,V-,B-}
- program RecHello;
-
- { Simple IPX demonstration program. Run this program on 1 workstation,
- run S_HELLO on another. S_HELLO will send "hello world" messages,
- this workstation will receive them.
-
- Polls the ECB until a packet is received. No ESR used. }
-
- uses crt,nwMisc,nwIPX;
-
- CONST IOSocket=$5678;
-
- Var ReceiveEcb:Tecb;
- IpxHdr:TipxHeader;
- socket:word;
- buf:array[1..546] of byte;
- t:byte;
- w:word;
- s:string;
- ReceivedBufLen:word;
- begin
- IF NOT IpxInitialize
- then begin
- writeln('Ipx needs to be installed.');
- halt(1);
- end;
- socket:=IOSocket;
- IF NOT IPXopenSocket(Socket,SHORT_LIVED_SOCKET)
- then begin
- writeln('IPXopenSocket returned error# ',nwIPX.result);
- halt(1);
- end;
-
- Repeat
- { Empty receive buffer (ReceiveEcb.fragment[2].address^) }
- FillChar(buf,546,#0);
-
- { Setup ECB and IPX header }
- IPXsetupListenECB(NIL,IOsocket,@buf,546,
- IpxHdr,ReceiveEcb);
- IPXListenForPacket(ReceiveECB);
-
- { Poll InUse flag until a packet was received }
- while ReceiveECB.InUseFlag<>0
- do IPXrelinquishControl;
-
- Case ReceiveECB.CompletionCode OF
- $00:begin { Dump received bytes.. }
- Write('Data received : ');
- ReceivedBufLen:=swap(IpxHdr.length)-SizeOf(TipxHeader);
- for t:=1 to ReceivedBufLen
- do write(chr(buf[t]));
- writeln;
- end;
- $FC:Writeln('The listen request has been canceled.');
- { impossible, as the cancelation has to be done by this program, and it doesn't }
- $FD:Writeln('Packet overflow error.');
- { 0 fragments, or receiving buffer too small. }
- $FF:Writeln('The socket is closed.');
- { Impossible. The socket is definitely open. See above. }
- end;
-
- { Now we're going to squeeze all information out of the IpxHdr }
- writeln('*IPX header info*');
- writeln('-total length : ',swap(IpxHdr.length):0);
- writeln('-data length : ',swap(IpxHdr.Length)-SizeOf(TipxHeader));
- writeln('-number of hops: ',(IpxHdr.TransportControl AND $0F):0);
- write('-sending adress: [');
- for t:=1 to 4
- do write(HexStr(IpxHdr.source.net[t],2));
- write('|');
- for t:=1 to 6
- do write(HexStr(IpxHdr.source.node[t],2));
- write('|');
- writeln(HexStr(swap(IpxHdr.source.socket),4),']');
- write('-destined for : [');
- for t:=1 to 4
- do write(HexStr(IpxHdr.destination.net[t],2));
- write('|');
- for t:=1 to 6
- do write(HexStr(IpxHdr.destination.node[t],2));
- write('|');
- writeln(HexStr(swap(IpxHdr.destination.socket),4),']');
-
- writeln;
- UNTIL keypressed;
-
- IF NOT IPXcloseSocket(IOsocket)
- then writeln('IPXcloseSocket returned error# ',nwIPX.result);
-
- end.